/**
 * function: 封装网络请求
 * @options.url URL地址
 * @options.data 请求参数
 * @options.contentType  请求参类型
 * @options.method 请求方式：GET/POST
 */


var config = require('./config.js');
import { getAppId } from './getAppId'
import { RSAENCRY, RSADECRY } from './rsa'
// let isRefreshToken = false;
// // 请求任务
// let requestList = [];
export function request(options){
    if(options.showLoading != false){
        wx.showLoading({
            title: "正在加载中...",
            mask: true
        });
    }
	let header = {
		'content-type': options.header&&options.header['content-type']?options.header['content-type']:'application/json;charset=UTF-8',
        'Authorization':  wx.getStorageSync("authorization")||"",
    }
    // 参数加密
    // console.log("参数加密前",JSON.stringify(options))
    // let data = options.data;
    // if(options.reqRSAENCRY &&  options.data){
    //     data = RSAENCRY.encryptLongByPublicKey(JSON.stringify(options.data))
    //     // console.log("参数加密后",JSON.parse(JSON.stringify(options)))
    // }
	return new Promise((resolve,reject) => {
		wx.request({
			url: config.baseUrl + options.url,
			data: (options.reqRSAENCRY &&  options.data) ? RSAENCRY.encryptLongByPublicKey(JSON.stringify(options.data)) : options.data,
			method: options.method ? options.method : "POST",
			header: header,
			success: function(res) {
                if(options.showLoading != false){
                    wx.hideLoading();
                }
                // console.log(res)
				if (res) {
                    // console.log("解密前",JSON.parse(JSON.stringify(res)))
                    if(options.resRSADECRY &&  res.data.data){
                        // console.log("解密后",RSADECRY.decryptLongByPublicKey(res.data.data))
                        // res.data.data = JSON.parse(RSADECRY.decryptLongByPublicKey(res.data.data))
                        res.data.data =  options.isParse != false ? JSON.parse(RSADECRY.decryptLongByPublicKey(res.data.data)) : RSADECRY.decryptLongByPublicKey(res.data.data)
                    }
					/** start 根据需求 接口的返回状态码进行处理 */
					if (res.data.code == 0 || res.data.code == 40003  || res.data.code == 45024) {
						resolve(res.data)
					} else if(res.data.code == 40001 || res.data.code == 40002) {
                        getToken().then(res => {
                            console.log(res)
                            if(res.code == 0){
                                if(res.data != 1){
                                    wx.setStorageSync('authorization', res.data);
                                    resolve(request(options));
                                }
                            }
                        }).catch(() => {
                            console.log("登陆失败")
                        }).finally(() => {
                            
                        });
                    } else {
                        if(!res.data.msg){
                            return
                        }
                        wx.showToast({
							title: res.data.msg,
							icon: 'none',
							duration: 2000
                        });
                        resolve(res.data)
                    }
				}
			},
			fail: function(error) {
                wx.showToast({
                    title: error.errMsg,
                    icon: 'none',
                    duration: 2000
                });
				reject(error)
			}
		})		
	})
}
export  function uploadFile(options){
	wx.showLoading({ 
        // icon: "loading", 
        title: options.beforeTitle||"正在上传……",
        mask: true 
    });
    return new Promise((resolve,reject) => {
        wx.uploadFile({
            url: config.baseUrl+options.url, 
            filePath: options.filePath,
            name: options.name,
            header: {
                'Authorization':  wx.getStorageSync("authorization")
            },
            formData: options.formData,
            success(res) {
                console.log(res)
                wx.hideLoading();
                if (res.data) {
                    const data = JSON.parse(res.data)
                    if (data.code == 0) {
                        wx.showToast({
                            title: options.afterTitle||"上传成功",
                            icon: 'none',
                            duration: 2000
                        });
                        resolve(data)
                    } else if(data.code == 40001 || data.code == 40002) {
                        getToken().then(res => {
                            console.log(res)
                            if(res.code == 0){
                                wx.setStorageSync('authorization', res.data);
                                resolve(uploadFile(requestList.shift()));
                            }
                        }).catch(() => {
                            console.log("登陆失败")
                        }).finally(() => {
                            
                        });
                    } else {
                        if(!data.msg){
                            return
                        }
                        wx.showToast({
							title: data.msg,
							icon: 'none',
							duration: 2000
                        });
                    }
                }
            },
            fail: function(error) {
				reject(error)
			},
            complete() {
                
            }
        })
    })
}
export async function requestImage(options){
	return new Promise((resolve,reject) => {
		wx.request({
			url: config.baseUrl+options.url, 
			method: "GET",
			header: {
				'Authorization':  wx.getStorageSync("authorization")||""
			},
			responseType: 'arraybuffer',
			success: function(res) {
				console.log(res)
				resolve(res)
			},
			fail: function(error) {
				reject(error)
			}
		});
	})
}
/**
 * function: 根据需求处理请求参数：添加固定参数配置等
 * @params 请求参数
 */
function dealParams(data) {
    //console.log("请求参数:", params)
    return data;
} 

export function getToken(){
    return new Promise((resolve,reject) => {
        wx.removeStorageSync('authorization')
        wx.login({
            success(res) {
                if (res.code) {
                    console.log("Code is:" + res.code)
                    let code = res.code;
                    resolve(request({
                        url: `/login/verifyIsLogin`,
                        reqRSAENCRY: true, // 参数是否加密
                        resRSADECRY: true, // 返回值是否解密
                        isParse: false,
                        data: {
                            appId: getAppId(),
                            code
                        }
                    }))
                } else {
                    // console.log('登录失败！' + res.errMsg);
                }
            }
        })
    })
}

// function getToken(){
//     // wx.clearStorageSync();
//     wx.removeStorageSync('authorization')
//     wx.login({
//         async success(res) {
//             if (res.code) {
//                 // console.log("Code is:" + res.code)
//                 let code = res.code;
//                 request({
//                     url: "/login?code=" + code,
//                     data: {
//                         code: code
//                     }
//                 }).then(res => {
//                     // console.log("GGGGG")
//                     console.log(res)
//                     if(res.code == 0){
//                         // console.log("ffff")
//                         wx.setStorageSync('authorization', res.data);	
//                         // reloadPage()
//                     }
//                 })
//                 // console.log(d)
//                 // if(d.code == 0){
//                 //     wx.setStorageSync('authorization', d.data.authorization);	
//                 //     reloadPage()
//                 // }
//             } else {
//                 // console.log('登录失败！' + res.errMsg);
//             }
//         }
//     })
// }
// //刷新当前页
// function reloadPage() {
// 	let pages = getCurrentPages();
//     let currPage = null;
//     // console.log(pages)
// 	if (pages.length) {
//         currPage = pages[pages.length - 1];
//         // console.log(currPage)
//         currPage.onLoad(currPage.options)        
//         currPage.onReady()
//         currPage.onShow()
// 	}
// 	// console.log(currPage)
// 	// let page = currPage.route;
// 	// let query = "";
// 	// for(let key in currPage.options){
// 	// 	query += key+"="+currPage.options[key]+"&"
// 	// }
// 	// if(query){
// 	// 	query = query.substr(0,query.length-1);
// 	// 	page = page +"?"+query
// 	// }
	
// }